#include "./WizAccessorInner.hpp"
#include "./WizAccessorLittleEndian.hpp"
#include "./WizAccessorBigEndian.hpp"

namespace Wiz
{
    namespace Accessor
    {
        namespace Inner
        {
            ::Wiz::Bool::Type Type::SwitchEndian(::Wiz::Endian::In ee)
            {
                ::Wiz::Accessor::Base::Ptr TempPtr = WIZ_NULLPTR;
                if (ee == ::Wiz::Endian::eLittle)
                {
                    TempPtr = new ::Wiz::Accessor::LittleEndian::Type(this);
                }
                else if (ee == ::Wiz::Endian::eBig)
                {
                    TempPtr = new ::Wiz::Accessor::BigEndian::Type(this);
                }
                if (::Wiz::NotValidPtr(TempPtr))
                {
                    return ::Wiz::Bool::False;
                }

                if (::Wiz::IsValidPtr(m_EndianPtr))
                {
                    delete m_EndianPtr;
                }

                m_EndianPtr = TempPtr;
                return ::Wiz::Bool::True;
            }

            //////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////

            ::Wiz::Bool::Type Type::Read(::Wiz::Boolean8::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::Read(::Wiz::Boolean16::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::Read(::Wiz::Boolean32::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::Read(::Wiz::Boolean64::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::Read(::Wiz::Int8::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::Read(::Wiz::Int16::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::Read(::Wiz::Int32::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::Read(::Wiz::Int64::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::Read(::Wiz::UInt8::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }
            ::Wiz::Bool::Type Type::Read(::Wiz::UInt16::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }
            ::Wiz::Bool::Type Type::Read(::Wiz::UInt32::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }
            ::Wiz::Bool::Type Type::Read(::Wiz::UInt64::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::Read(::Wiz::Real16::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }
            ::Wiz::Bool::Type Type::Read(::Wiz::Real32::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }
            ::Wiz::Bool::Type Type::Read(::Wiz::Real64::Out OutData)
            {
                return m_EndianPtr->Read(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Boolean8::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Boolean16::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Boolean32::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Boolean64::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Int8::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Int16::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Int32::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Int64::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::UInt8::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }
            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::UInt16::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }
            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::UInt32::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }
            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::UInt64::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Real16::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }
            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Real32::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }
            ::Wiz::Bool::Type Type::ReadAndAdvance(::Wiz::Real64::Out OutData)
            {
                return m_EndianPtr->ReadAndAdvance(OutData);
            }

            //////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////

            ::Wiz::Bool::Type Type::Write(::Wiz::Boolean8::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::Boolean16::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::Boolean32::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::Boolean64::In InData)
            {
                return m_EndianPtr->Write(InData);
            }

            ::Wiz::Bool::Type Type::Write(::Wiz::Int8::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::Int16::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::Int32::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::Int64::In InData)
            {
                return m_EndianPtr->Write(InData);
            }

            ::Wiz::Bool::Type Type::Write(::Wiz::UInt8::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::UInt16::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::UInt32::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::UInt64::In InData)
            {
                return m_EndianPtr->Write(InData);
            }

            ::Wiz::Bool::Type Type::Write(::Wiz::Real16::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::Real32::In InData)
            {
                return m_EndianPtr->Write(InData);
            }
            ::Wiz::Bool::Type Type::Write(::Wiz::Real64::In InData)
            {
                return m_EndianPtr->Write(InData);
            }

            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Boolean8::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Boolean16::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Boolean32::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Boolean64::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }

            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Int8::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Int16::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Int32::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Int64::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }

            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::UInt8::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::UInt16::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::UInt32::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::UInt64::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }

            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Real16::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Real32::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }
            ::Wiz::Bool::Type Type::WriteAndAdvance(::Wiz::Real64::In InData)
            {
                return m_EndianPtr->WriteAndAdvance(InData);
            }

            //////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////
        } /// end of namespace Inner
    } /// end of namespace Accessor
} /// end of namespace Wiz
